/*
 * author      : dormi330
 * date        : 2018/6/24
 * description : TODO
 */

package com.deep.trade.infrastructure.mybatis.order;

import com.deep.trade.domain.order.TradeOrder;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;


@Mapper
public interface TradeOrderMapper {

    /** 插入新数据 */
    void insert(@Param("eo") TradeOrder eo);

    /** 更新状态, 返回更新的条数 */
    int updateStatus(
            /* condition */
            @Param("tenantCode") String tenantCode,
            @Param("tradeOrderId") String tradeOrderId,
            @Param("fromVersion") long fromVersion,

            /* changed field */
            @Param("toStatus") String toStatus,
            @Param("preStatus") String preStatus,   /* preStatus 可以通过sql来处理,但是这里使用业务逻辑处理更清晰 */
            @Param("rejectReason") String rejectReason,
            @Param("auditedAt") Date auditedAt,
            @Param("updatedBy") String updatedBy
    );

    /** 删除一条记录, false delete */
    int deleteById(@Param("tenantCode") String tenantCode,
                   @Param("tradeOrderId") String tradeOrderId,
                   @Param("fromVersion") Long fromVersion
    );

    // ============= query ===============

    /** 查询 OrderSummary 对应的 TradeOrder */
    List<TradeOrder> listByOrderSummary(
            @Param("tenantCode") String tenantCode,
            @Param("orderSummaryId") String orderSummaryId);

    /** 根据id 查询单个 TradeOrder */
    TradeOrder findOneById(
            @Param("tenantCode") String tenantCode,
            @Param("id") String id);

    /** 根据 memberId 查询 */
    List<TradeOrder> listByMember(
            @Param("tenantCode") String tenantCode,
            @Param("memberId") String memberId);

    /** 查询租户下的 tradeorder */
    List<TradeOrder> listByTenant(@Param("tenantCode") String tenantCode);

}
